/**********************************************************************\

 Copyright 2012 Diggory Blake

 This file is part of klip-engine

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

\**********************************************************************/

#include "kcontroller.h"
#include "kerror.h"
#include "kactor.h"

void kController::onActorAdded(kActor* actor) {
	if (actor->_controller)
		actor->_controller->onActorRemoved(actor);

	kWatcher::onActorAdded(actor);

	actor->_controller = this;
}
void kController::onActorRemoved(kActor* actor) {
	if (actor->_controller == this)
		actor->_controller = 0;

	kWatcher::onActorRemoved(actor);
}
kController::~kController() {
	for (auto i = getActors().begin(); i != getActors().end(); i++) {
		kActor* actor = *i;
		if (actor->_controller == this)
			actor->_controller = 0;
	}
}
void kController::setActorTransform(kActor* actor, const kMat3x3& transform) {
	if (getActors().find(actor) == getActors().end())
		throw kError(_T("Actor is not owned by controller!"));

	actor->setTransform(transform);
}
void kController::setActorData(kActor* actor, void* data) {
	if (getActors().find(actor) == getActors().end())
		throw kError(_T("Actor is not owned by controller!"));

	actor->_controllerData = data;
}
void* kController::getActorData(kActor* actor) {
	if (getActors().find(actor) == getActors().end())
		throw kError(_T("Actor is not owned by controller!"));

	return actor->_controllerData;
}
